package utils;

import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.HashMap;
import java.util.Map;

public class FileContentReplacer {

    public static void main(String[] args) {

        String filePath = "D:\\dev9.1\\leetcode\\src\\main\\resources\\1.txt";

        // 定义需要替换的字符映射（键：原字符，值：目标字符）
        Map<Character, Character> replaceRules = new HashMap<>();
        replaceRules.put('[', '{');
        replaceRules.put(']', '}');
        replaceRules.put('"', '\'');

        // 调用封装的函数执行替换
        try {
            String outputPath = replaceFileContent(filePath, replaceRules);
            System.out.println("替换完成，输出文件：" + outputPath);
        } catch (IOException e) {
            System.err.println("处理失败：" + e.getMessage());
        }
    }

    /**
     * 核心函数：替换文件内容并输出到同目录
     * @param inputFilePath 输入文件路径
     * @param replaceRules 替换规则（原字符 -> 目标字符）
     * @return 输出文件路径
     * @throws IOException 处理文件时可能抛出的异常
     */
    public static String replaceFileContent(String inputFilePath, Map<Character, Character> replaceRules) throws IOException {
        // 1. 验证输入文件
        File inputFile = new File(inputFilePath);
        if (!inputFile.exists() || !inputFile.isFile()) {
            throw new IOException("文件不存在或不是有效文件：" + inputFile.getAbsolutePath());
        }

        // 2. 读取文件内容
        String content = new String(Files.readAllBytes(inputFile.toPath()), StandardCharsets.UTF_8);

        // 3. 执行替换（应用替换规则）
        String replacedContent = applyReplaceRules(content, replaceRules);

        // 4. 生成输出文件路径（同目录，原文件名加后缀）
        File outputFile = createOutputFile(inputFile);

        // 5. 写入替换后的内容
        Files.write(outputFile.toPath(), replacedContent.getBytes(StandardCharsets.UTF_8));

        return outputFile.getAbsolutePath();
    }

    /**
     * 应用替换规则到文本内容
     * @param content 原始文本
     * @param replaceRules 替换规则
     * @return 替换后的文本
     */
    private static String applyReplaceRules(String content, Map<Character, Character> replaceRules) {
        StringBuilder result = new StringBuilder();
        for (char c : content.toCharArray()) {
            // 若当前字符需要替换，则用目标字符，否则保留原字符
            result.append(replaceRules.getOrDefault(c, c));
        }
        return result.toString();
    }

    /**
     * 在同目录创建输出文件（避免覆盖原文件）
     * @param inputFile 输入文件
     * @return 输出文件对象
     */
    private static File createOutputFile(File inputFile) {
        String parentDir = inputFile.getParent();
        String originalName = inputFile.getName();
        // 生成输出文件名（例如：1.txt -> 1_replaced.txt）
        String outputName = originalName.replaceFirst("(\\.[^.]*)?$", "_replaced$1");
        return new File(parentDir, outputName);
    }
}
